ããã·ãŒãžã£ã«çæã«ãããåºæ¬çãªã¢ã«ãŽãªãºã ã§ããããŒãªã³ãã€ãºã®è€éããæ¢æ±ããã²ãŒã ãã°ã©ãã£ãã¯ã¹ãªã©ã§ãªã¢ã«ã§å€æ§ãªã³ã³ãã³ããäœæããæ¹æ³ãçºèŠããŠãã ããã
ããã·ãŒãžã£ã«çæïŒããŒãªã³ãã€ãºã®è©³çްãªè§£èª¬
ããã·ãŒãžã£ã«çæã¯ãã¢ã«ãŽãªãºã çã«ã³ã³ãã³ããäœæããããã®åŒ·åãªãã¯ããã¯ã§ãããæåã§äœæããå¿ èŠãªããåºå€§ã§å€æ§ãªäžçããã¯ã¹ãã£ãããã³ãã¿ãŒã³ãçæã§ããŸããå€ãã®ããã·ãŒãžã£ã«çæã·ã¹ãã ã®äžå¿ã«ããã®ã¯ãæ»ããã§èªç¶ã«èŠããã©ã³ãã ãªå€ãäœæããããã®åºæ¬çãªã¢ã«ãŽãªãºã ã§ããããŒãªã³ãã€ãºã§ãããã®èšäºã§ã¯ãããŒãªã³ãã€ãºã®è€éãããã®ã¢ããªã±ãŒã·ã§ã³ãããã³ãã®é·æãšçæãæ¢æ±ããŸãã
ããŒãªã³ãã€ãºãšã¯ïŒ
1980幎代åé ã«ã±ã³ã»ããŒãªã³ã«ãã£ãŠéçºãããããŒãªã³ãã€ãºã¯ãæšæºçãªãã¯ã€ããã€ãºãšæ¯èŒããŠãããèªç¶ã«èŠããã³ããŒã¬ã³ããªæ¬äŒŒä¹±æ°åãçæããã°ã©ããŒã·ã§ã³ãã€ãºé¢æ°ã§ããæšæºçãªãã¯ã€ããã€ãºã¯ããã€ããè³éããªãã©ã³ãžã·ã§ã³ããããããŸãããããŒãªã³ãã€ãºã¯æ»ããã§é£ç¶çãªå€åãäœæããŸãããã®ç¹æ§ã«ãããå°åœ¢ãé²ããã¯ã¹ãã£ãªã©ã®èªç¶çŸè±¡ãã·ãã¥ã¬ãŒãããã®ã«çæ³çã§ãã1997幎ãã±ã³ã»ããŒãªã³ã¯ããŒãªã³ãã€ãºã®äœæã§ã¢ã«ãããŒæè¡è³ãåè³ããŸããã
ãã®æ žå¿ã«ãããŠãããŒãªã³ãã€ãºã¯ã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãã¯ãã«ã®æ Œåãå®çŸ©ããããšã«ãã£ãŠåäœããŸãã空éå ã®åç¹ã«ã¯ãã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãå²ãåœãŠãããŸããç¹å®ã®ç¹ã§ã®ãã€ãºå€ãèšç®ããããã«ãã¢ã«ãŽãªãºã ã¯åšå²ã®æ Œåç¹ã§ã®ã°ã©ããŒã·ã§ã³ãã¯ãã«ã®ãããç©ãšããããã®æ Œåç¹ããåé¡ã®ç¹ãžã®ãã¯ãã«ãšã®éãè£éããŸãããã®è£éããã»ã¹ã«ãããæ»ããã§é£ç¶çãªåºåãä¿èšŒãããŸãã
ããŒãªã³ãã€ãºã®ä»çµã¿ïŒã¹ããããã€ã¹ãããã®èª¬æ
ããŒãªã³ãã€ãºãçæããããã»ã¹ãããç°¡åãªã¹ãããã«åè§£ããŠã¿ãŸãããã
- æ Œåãå®çŸ©ããïŒç©ºéïŒ1Dã2DããŸãã¯3DïŒã«ãªãŒããŒã¬ã€ããã°ãªããïŒæ ŒåïŒãæ³åããŠãã ããããã®ã°ãªããã®ééã«ãã£ãŠããã€ãºã®åšæ³¢æ°ã決å®ãããŸããééãå°ããã»ã©ãåšæ³¢æ°ãé«ãããã詳现ãªãã€ãºã«ãªããééã倧ããã»ã©ãåšæ³¢æ°ãäœããããæ»ãããªãã€ãºã«ãªããŸãã
- ã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãå²ãåœãŠãïŒæ Œåã®åç¹ïŒé ç¹ïŒã«ãã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãã¯ãã«ãå²ãåœãŠãŸãããããã®ã°ã©ããŒã·ã§ã³ã¯éåžžãæ£èŠåãããŸãïŒé·ã1ïŒãããã§ã®éèŠãªç¹ã¯ãã°ã©ããŒã·ã§ã³ãæ¬äŒŒã©ã³ãã ã§ããå¿ èŠããããšããããšã§ããã€ãŸãããã€ãºãå埩å¯èœã§ããããšãä¿èšŒããããã«ãæ Œåç¹ã®åº§æšã«åºã¥ããŠæ±ºå®è«çã§ãã
- ãããç©ãèšç®ããïŒãã€ãºå€ãèšç®ããç¹å®ã®ç¹ã«ã€ããŠããã®ç¹ãåãŸãæ Œåã»ã«ã決å®ããŸããæ¬¡ã«ããã®ç¹ãå²ãåæ Œåç¹ã«ã€ããŠããã®æ Œåç¹ããç®çã®ç¹ãžã®ãã¯ãã«ãèšç®ããŸãããã®ãã¯ãã«ãšããã®æ Œåç¹ã«å²ãåœãŠãããã°ã©ããŒã·ã§ã³ãã¯ãã«ã®ãããç©ãåããŸãã
- è£éããïŒããã¯ãããŒãªã³ãã€ãºãæ»ããã«ããéèŠãªã¹ãããã§ããåã®ã¹ãããã§èšç®ããããããç©ã®éãè£éããŸããè£é颿°ã¯éåžžãç·åœ¢è£éã§ã¯ãªããã³ãµã€ã³é¢æ°ãã¹ã ãŒã¹ã¹ããã颿°ãªã©ã®æ»ãããªæ²ç·ã§ããããã«ãããæ Œåã»ã«éã®ãã©ã³ãžã·ã§ã³ãã·ãŒã ã¬ã¹ã«ãªããŸãã
- æ£èŠåããïŒæåŸã«ãè£éãããå€ãç¯å²ïŒéåžžã¯-1ã1ããŸãã¯0ã1ïŒã«æ£èŠåããŸããããã«ããããã€ãºé¢æ°ã®äžè²«ããåºåç¯å²ãæäŸãããŸãã
ã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãšæ»ãããªè£éã®çµã¿åããããããŒãªã³ãã€ãºã«ç¹åŸŽçãªæ»ããã§ææ©çãªå€èгãäžããŸãããã€ãºã®åšæ³¢æ°ãšæ¯å¹ ã¯ãæ Œåééã調æŽããæçµçãªãã€ãºå€ã«ã¹ã±ãŒãªã³ã°ä¿æ°ãæããããšã§å¶åŸ¡ã§ããŸãã
ããŒãªã³ãã€ãºã®å©ç¹
- æ»ããã§é£ç¶çãªåºåïŒè£éæ³ã«ãããæ»ããã§é£ç¶çãªåºåãä¿èšŒããããã¯ã€ããã€ãºã®å³ãããã©ã³ãžã·ã§ã³ãåé¿ãããŸãã
- å¶åŸ¡å¯èœãªåšæ³¢æ°ãšæ¯å¹ ïŒãã€ãºã®åšæ³¢æ°ãšæ¯å¹ ã¯ç°¡åã«èª¿æŽã§ããå¹ åºãèŠèŠå¹æãå®çŸã§ããŸãã
- å埩å¯èœïŒããŒãªã³ãã€ãºã¯æ±ºå®è«çã§ããã€ãŸããåãå ¥å座æšãäžããããå Žåãåžžã«åãåºåå€ãçæãããŸããããã¯ãããã·ãŒãžã£ã«çæã®äžè²«æ§ã確ä¿ããããã«éèŠã§ãã
- ã¡ã¢ãªå¹çïŒå€§éã®ããŒã¿ã»ãããä¿åããå¿ èŠã¯ãããŸãããæ Œåçšã®ã°ã©ããŒã·ã§ã³ãã¯ãã«ã®ã»ããã®ã¿ãå¿ èŠã§ãã
- 倿¬¡å ïŒããŒãªã³ãã€ãºã¯ã倿¬¡å ïŒ1Dã2Dã3Dãããã«ã¯ãã以äžïŒã«æ¡åŒµã§ãããããããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«çšéãåºãã§ãã
ããŒãªã³ãã€ãºã®çæ
- èšç®ã³ã¹ãïŒããŒãªã³ãã€ãºã®èšç®ã¯ãç¹ã«é«æ¬¡å ã®å ŽåããŸãã¯å€§ããªãã¯ã¹ãã£ãçæããå Žåã«ãèšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã
- é¡èãªã¢ãŒãã£ãã¡ã¯ãïŒç¹å®ã®åšæ³¢æ°ãšè§£å床ã§ã¯ãããŒãªã³ãã€ãºã¯ã°ãªããã®ãããªãã¿ãŒã³ãå埩çãªç¹åŸŽãªã©ãé¡èãªã¢ãŒãã£ãã¡ã¯ãã瀺ãããšããããŸãã
- æ©èœã®å¶åŸ¡ãå¶éãããïŒããŒãªã³ãã€ãºã®å šäœçãªå€èгã¯ãåšæ³¢æ°ãšæ¯å¹ ã«ãã£ãŠå¶åŸ¡ã§ããŸãããç¹å®ã®æ©èœã«å¯Ÿããå¶åŸ¡ã¯å¶éãããŸãã
- ã·ã³ãã¬ãã¯ã¹ãã€ãºãããçæ¹æ§ãäœãïŒç¹ã«é«æ¬¡å ã§ã¯ãè»žã«æ²¿ã£ãã¢ãŒãã£ãã¡ã¯ãã瀺ãããšããããŸãã
ããŒãªã³ãã€ãºã®ã¢ããªã±ãŒã·ã§ã³
ããŒãªã³ãã€ãºã¯ãç¹ã«ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ãšã²ãŒã éçºã®åéã§ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ãæã€æ±çšæ§ã®é«ãããŒã«ã§ãã
1. å°åœ¢çæ
ããŒãªã³ãã€ãºã®æãäžè¬çãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ã¯ãå°åœ¢çæã§ãããã€ãºå€ãé«ãå€ãšããŠè§£éããããšã«ãããå±±ãè°·ãäžã®ãããªã¢ã«ãªé¢šæ¯ãäœæã§ããŸãããã€ãºã®åšæ³¢æ°ãšæ¯å¹ ã調æŽããŠãå°åœ¢å šäœã®éºãããšã¹ã±ãŒã«ãå¶åŸ¡ã§ããŸããããšãã°ãMinecraftã®ãããªã²ãŒã ïŒããŒãªã³ãã€ãºã®ã¿ã䜿çšããŠããããã§ã¯ãããŸããããåæ§ã®æè¡ãçµã¿èŸŒãŸããŠããŸãïŒã§ã¯ãå°åœ¢çæã¯ãã€ãºé¢æ°ã«äŸåããŠããã¬ã€ã€ãŒãæ¢çŽ¢ãã倿§ãªé¢šæ¯ãäœæããŸãã *No Man's Sky*ã®ãããªå€ãã®ãªãŒãã³ã¯ãŒã«ãã²ãŒã ã§ã¯ãããŒãªã³ãã€ãºã®ããªãšãŒã·ã§ã³ãã¯ãŒã«ãçæã®1ã€ã®ã³ã³ããŒãã³ããšããŠäœ¿çšãããŠããŸãã
äŸïŒãã¬ã€ã€ãŒãåºå€§ãªãæç¶ãçã«çæããã颚æ¯ãæ¢çŽ¢ã§ããã²ãŒã ã®äžçãæ³åããŠãã ãããããŒãªã³ãã€ãºã䜿çšããŠå°åœ¢ã®ãã€ãããããäœæãããã€ãºã®ç°ãªããªã¯ã¿ãŒãïŒåŸã§èª¬æïŒã§ãã£ããŒã«ãšããªãšãŒã·ã§ã³ã远å ã§ããŸãããã€ãºã®é«ãåšæ³¢æ°ã¯å°ããªå²©ãéèµ·ã衚ããäœãåšæ³¢æ°ã¯ãªã ãããªäžãå±±ã衚ãå ŽåããããŸãã
2. ãã¯ã¹ãã£çæ
ããŒãªã³ãã€ãºã䜿çšããŠãé²ãæšæã倧çç³ãéå±ãªã©ã®ããŸããŸãªãããªã¢ã«ã®ãã¯ã¹ãã£ãäœæããããšãã§ããŸãããã€ãºå€ãç°ãªãè²ãŸãã¯ãããªã¢ã«ã®ããããã£ã«ãããã³ã°ããããšã«ããããªã¢ã«ã§èŠèŠçã«é åçãªãã¯ã¹ãã£ãäœæã§ããŸããããšãã°ãããŒãªã³ãã€ãºã¯æšæã®æšç®ã倧çç³ã®æžŠå·»ããã·ãã¥ã¬ãŒãã§ããŸãã Adobe PhotoshopãGIMPãªã©ã®å€ãã®ããžã¿ã«ã¢ãŒãããã°ã©ã ã«ã¯ããã¯ã¹ãã£ããã°ããçæããããã®ããŒãªã³ãã€ãºããŒã¹ã®ãã£ã«ã¿ãŒãçµã¿èŸŒãŸããŠããŸãã
äŸïŒæšè£œã®ããŒãã«ã®3Dã¬ã³ããªã³ã°ãèããŠã¿ãŸããããããŒãªã³ãã€ãºã䜿çšããŠæšç®ãçæãã衚é¢ã«å¥¥è¡ããšãªã¢ãªãºã ã远å ã§ããŸãããã€ãºå€ã¯ãè²ãšå¹åžã®å€åã«ãããã³ã°ããŠããªã¢ã«ãªæšç®ãã¿ãŒã³ãäœæã§ããŸãã
3. é²ã®ã·ãã¥ã¬ãŒã·ã§ã³
ãªã¢ã«ãªé²ã®åœ¢æãäœæããã«ã¯ãèšç®éãå€ããªãå¯èœæ§ããããŸããããŒãªã³ãã€ãºã¯ãé²ã®ãããªãã¿ãŒã³ãçæããæ¯èŒçå¹ççãªæ¹æ³ãæäŸããŸãããã€ãºå€ã䜿çšããŠé²ã®ç²åã®å¯åºŠãŸãã¯äžéæåºŠãå¶åŸ¡ããããšã«ããã圢ç¶ãšãµã€ãºãç°ãªã説åŸåã®ããé²ã®åœ¢æãäœæã§ããŸãã *ããããšãã©ãããŒãããŒã«*ã®ãããªæ ç»ã§ã¯ããã€ãºé¢æ°ãå«ãæç¶ãåã®ææ³ããæ°ãŸãããªäžçãšãã£ã©ã¯ã¿ãŒãäœæããããã«åºã䜿çšãããŸããã
äŸïŒãã©ã€ãã·ãã¥ã¬ãŒã¿ãŒã§ã¯ãããŒãªã³ãã€ãºã䜿çšããŠãªã¢ã«ãªé²ã®é¢šæ¯ãçæã§ããŸãããã€ãºå€ã䜿çšããŠé²ã®å¯åºŠãå¶åŸ¡ããèãå·»é²ãŸãã¯æ¿ãç©é²ãäœæã§ããŸãããã€ãºã®ç°ãªãã¬ã€ã€ãŒãçµã¿åãããŠãããè€éã§å€æ§ãªé²ã®åœ¢æãäœæã§ããŸãã
4. ã¢ãã¡ãŒã·ã§ã³ãšãšãã§ã¯ã
ããŒãªã³ãã€ãºã䜿çšããŠãç«ãç ãæ°Žãä¹±æµãªã©ã®ããŸããŸãªã¢ãã¡ãŒã·ã§ã³ãšãã§ã¯ããäœæã§ããŸãããã€ãºé¢æ°ã®å ¥å座æšãæéãšãšãã«ã¢ãã¡ãŒã·ã§ã³åããããšã«ãããåçã§é²åãããã¿ãŒã³ãäœæã§ããŸããããšãã°ãããŒãªã³ãã€ãºãã¢ãã¡ãŒã·ã§ã³åãããšãçã®ã¡ãã€ããç ã®æåãã·ãã¥ã¬ãŒãã§ããŸãã Houdiniãªã©ã®èŠèŠå¹æãœãããŠã§ã¢ã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã«ãã€ãºé¢æ°ãåºç¯å²ã«äœ¿çšããããšããããããŸãã
äŸïŒéæ³ã®ããŒã¿ã«ãéãèŠèŠå¹æãæ€èšããŠãã ãããããŒãªã³ãã€ãºã䜿çšããŠãããŒã¿ã«ã®åšãã®æžŠå·»ãæ··æ²ãšãããšãã«ã®ãŒãäœæãããã€ãºå€ã§ãšãã§ã¯ãã®è²ãšåŒ·åºŠãå¶åŸ¡ã§ããŸãããã€ãºã®ã¢ãã¡ãŒã·ã§ã³ã¯ãåçãªãšãã«ã®ãŒãšåãã®æèŠãçã¿åºããŸãã
5. ã¢ãŒããšãã¶ã€ã³ã®äœæ
çŽç²ã«æ©èœçãªã¢ããªã±ãŒã·ã§ã³ãè¶ ããŠãããŒãªã³ãã€ãºãèžè¡çãªåãçµã¿ã§äœ¿çšããŠãæœè±¡çãªãã¿ãŒã³ãèŠèŠåãããã³ãžã§ãã¬ãŒãã£ãã¢ãŒãäœåãçæã§ããŸãããã®ææ©çã§äºæž¬äžå¯èœãªæ§è³ªã¯ãè峿·±ãã審çŸçã«å¿å°ããçµæã«ã€ãªããå¯èœæ§ããããŸãã Casey Reasã®ãããªã¢ãŒãã£ã¹ãã¯ããžã§ãã¬ãŒãã£ãã¢ã«ãŽãªãºã ãäœåã§åºãå©çšããŠããããã€ãºé¢æ°ãã³ã¢èŠçŽ ãšããŠæ¡çšããããšããããããŸãã
äŸïŒã¢ãŒãã£ã¹ãã¯ããŒãªã³ãã€ãºã䜿çšããŠäžé£ã®æœè±¡çãªç»åãçæããããŸããŸãªã«ã©ãŒãã¬ãããšãã€ãºãã©ã¡ãŒã¿ãŒã詊ããŠããŠããŒã¯ã§èŠèŠçã«é åçãªæ§å³ãäœæããå ŽåããããŸããçµæãšããŠåŸãããç»åã¯ãã¢ãŒãã¯ãŒã¯ãšããŠå°å·ããã³è¡šç€ºã§ããŸãã
ããŒãªã³ãã€ãºã®ããªãšãŒã·ã§ã³ãšæ¡åŒµæ©èœ
ããŒãªã³ãã€ãºã¯ããèªäœã匷åãªæè¡ã§ããããã®å¶éã®ããã€ãã«å¯ŸåŠããããæ°ããæ©èœãæäŸãããããããã€ãã®ããªãšãŒã·ã§ã³ãšæ¡åŒµæ©èœãçã¿åºããŸãããããã€ãã®æ³šç®ãã¹ãäŸã次ã«ç€ºããŸãã
1. ã·ã³ãã¬ãã¯ã¹ãã€ãº
ã·ã³ãã¬ãã¯ã¹ãã€ãºã¯ãã±ã³ã»ããŒãªã³èªèº«ã«ãã£ãŠéçºããããããŒãªã³ãã€ãºã«ä»£ããæ°ããæ¹è¯çã§ããèšç®ã³ã¹ãããç¹ã«é«æ¬¡å ã§ã®é¡èãªã¢ãŒãã£ãã¡ã¯ãã®ååšãªã©ãããŒãªã³ãã€ãºã®å¶éã®ããã€ãã«å¯ŸåŠããŸããã·ã³ãã¬ãã¯ã¹ãã€ãºã¯ãããåçŽãªåºç€æ§é ïŒã·ã³ãã¬ãã¯ã¹ã°ãªããïŒã䜿çšããäžè¬çã«ããŒãªã³ãã€ãºãããèšç®ãé«éã§ããç¹ã«2Dããã³3Dã®å ŽåããŸããããŒãªã³ãã€ãºãããçæ¹æ§ïŒæ¹åãã€ã¢ã¹ãå°ãªãïŒãåªããŠããŸãã
2. OpenSimplex Noise
Simplex Noiseã®æ¹è¯çã§ããOpenSimplexã¯ãå ã®Simplexã¢ã«ãŽãªãºã ã«ååšããæ¹åæ§ã¢ãŒãã£ãã¡ã¯ããæé€ããããšãç®çãšããŠããŸãã Kurt Spencerã«ãã£ãŠéçºãããOpenSimplexã¯ãåä»»è ãããèŠèŠçã«çæ¹æ§ã®é«ãçµæãéæããããšããŠããŸãã
3. ãã©ã¯ã¿ã«ãã€ãºïŒfBm - åæ°ãã©ãŠã³éåïŒ
ãã©ã¯ã¿ã«ãã€ãºïŒfBmïŒåæ°ãã©ãŠã³éåïŒãšãåŒã°ããŸãïŒã¯ãããèªäœããã€ãºé¢æ°ã§ã¯ãããŸããããç°ãªãåšæ³¢æ°ãšæ¯å¹ ã§ããŒãªã³ãã€ãºïŒãŸãã¯ãã®ä»ã®ãã€ãºé¢æ°ïŒã®è€æ°ã®ãªã¯ã¿ãŒããçµã¿åãããããã®æè¡ã§ããåãªã¯ã¿ãŒãã¯ç°ãªãã¹ã±ãŒã«ã§ãã£ããŒã«ãæäŸããããè€éã§ãªã¢ã«ã«èŠããçµæãäœæããŸããåšæ³¢æ°ãé«ãã»ã©çްãããã£ããŒã«ã远å ãããåšæ³¢æ°ãäœãã»ã©å šäœçãªåœ¢ç¶ãæäŸãããŸããåãªã¯ã¿ãŒãã®æ¯å¹ ã¯ãéåžžãã©ãã¥ããªãã£ïŒéåžžã¯2.0ïŒãšåŒã°ããä¿æ°ã§çž®å°ãããé«åšæ³¢ãå šäœçãªçµæãžã®å¯äžãå°ãªãããããã«ããŸãã fBMã¯ããªã¢ã«ã«èŠããå°åœ¢ãé²ããã¯ã¹ãã£ãçæããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã Unityå°åœ¢ãšã³ãžã³ã®*Hills*ã®å°åœ¢ã®äŸã§ã¯ãåæ°ãã©ãŠã³éåãå©çšããŠããŸãã
äŸïŒfBmã§å°åœ¢ãçæããå Žåãæåã®ãªã¯ã¿ãŒãã§å±±ãšè°·ã®å šäœçãªåœ¢ç¶ãäœæãããå ŽåããããŸãã 2çªç®ã®ãªã¯ã¿ãŒãã¯ãå°ããªäžãšå°Ÿæ ¹ã远å ããŸãã 3çªç®ã®ãªã¯ã¿ãŒãã¯å²©ãå°ç³ã远å ãã以äžåæ§ã§ããåãªã¯ã¿ãŒãã¯ãåŸã ã«å°ããã¹ã±ãŒã«ã§ãã£ããŒã«ã远å ãããªã¢ã«ã§å€æ§ãªé¢šæ¯ãäœæããŸãã
4. ä¹±æµ
ä¹±æµã¯ããã€ãºé¢æ°ã®çµ¶å¯Ÿå€ã䜿çšãããã©ã¯ã¿ã«ãã€ãºã®ããªãšãŒã·ã§ã³ã§ããããã«ãããããæ··æ²ãšããä¹±æµã®å€èгãäœæãããç«ãç ãççºãªã©ã®ãšãã§ã¯ãã®ã·ãã¥ã¬ãŒã·ã§ã³ã«åœ¹ç«ã¡ãŸãã
å®è·µçãªå®è£ ã®ãã³ã
ãããžã§ã¯ãã§ããŒãªã³ãã€ãºãå®è£ ããéã«çæãã¹ãå®è·µçãªãã³ããæ¬¡ã«ç€ºããŸãã
- ããã©ãŒãã³ã¹ã®æé©åïŒããŒãªã³ãã€ãºã¯ãç¹ã«é«æ¬¡å ã®å ŽåããŸãã¯å€§ããªãã¯ã¹ãã£ãçæããå Žåã«ãèšç®ã³ã¹ããé«ããªãå¯èœæ§ããããŸããäºåã«èšç®ãããå€ã®ã«ãã¯ã¢ããããŒãã«ã䜿çšããããã·ã³ãã¬ãã¯ã¹ãã€ãºã®ãããªé«éãã€ãºé¢æ°ã䜿çšããŠãå®è£ ãæé©åããããšãæ€èšããŠãã ããã
- è€æ°ã®ãªã¯ã¿ãŒãã䜿çšããïŒããŒãªã³ãã€ãºïŒfBmïŒã®è€æ°ã®ãªã¯ã¿ãŒããçµã¿åãããããšã¯ãçµæã«ãã£ããŒã«ãšããªãšãŒã·ã§ã³ã远å ããã®ã«æé©ãªæ¹æ³ã§ããããŸããŸãªåšæ³¢æ°ãšæ¯å¹ ã詊ããŠãç®çã®ãšãã§ã¯ããå®çŸããŸãã
- çµæã®æ£èŠåïŒäžè²«ããçµæãåŸãããã«ããã€ãºå€ãäžè²«ããç¯å²ïŒäŸïŒ-1ã1ããŸãã¯0ã1ïŒã«æ£èŠåãããŠããããšã確èªããŠãã ããã
- ç°ãªãè£é颿°ã詊ãïŒè£é颿°ã®éžæã¯ããã€ãºã®å€èгã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããã³ãµã€ã³è£éãã¹ã ãŒã¹ã¹ãããè£éãªã©ãããŸããŸãªé¢æ°ã詊ããŠãã¢ããªã±ãŒã·ã§ã³ã«æé©ãªé¢æ°ãèŠã€ããŠãã ããã
- ä¹±æ°ãžã§ãã¬ãŒã¿ãŒã«ã·ãŒããèšå®ããïŒããŒãªã³ãã€ãºãå埩å¯èœã«ããã«ã¯ãäžè²«ããå€ã§ä¹±æ°ãžã§ãã¬ãŒã¿ãŒã«ã·ãŒããèšå®ããŠãã ãããããã«ãããåãå ¥å座æšãåžžã«åãåºåå€ãçæããããšãä¿èšŒãããŸãã
ã³ãŒãäŸïŒç䌌ã³ãŒãïŒ
2DããŒãªã³ãã€ãºãå®è£ ããæ¹æ³ã®ç°¡ç¥åãããç䌌ã³ãŒãã®äŸã次ã«ç€ºããŸãã
function perlinNoise2D(x, y, seed):
// 1. æ ŒåïŒã°ãªããïŒãå®çŸ©ãã
gridSize = 10 // ã°ãªãããµã€ãºã®äŸ
// 2. æ Œåç¹ã«ã©ã³ãã ãªã°ã©ããŒã·ã§ã³ãå²ãåœãŠã
function getGradient(i, j, seed):
random = hash(i, j, seed) // ç䌌乱æ°ãçæããããã·ã¥é¢æ°
angle = random * 2 * PI // ä¹±æ°ãè§åºŠã«å€æãã
return (cos(angle), sin(angle)) // ã°ã©ããŒã·ã§ã³ãã¯ãã«ãè¿ã
// 3. ç¹(x, y)ãå«ãæ Œåã»ã«ã決å®ãã
x0 = floor(x / gridSize) * gridSize
y0 = floor(y / gridSize) * gridSize
x1 = x0 + gridSize
y1 = y0 + gridSize
// 4. ãããç©ãèšç®ãã
s = dotProduct(getGradient(x0, y0, seed), (x - x0, y - y0))
t = dotProduct(getGradient(x1, y0, seed), (x - x1, y - y0))
u = dotProduct(getGradient(x0, y1, seed), (x - x0, y - y1))
v = dotProduct(getGradient(x1, y1, seed), (x - x1, y - y1))
// 5. è£éããïŒã¹ã ãŒã¹ã¹ãããã䜿çšïŒ
sx = smoothstep((x - x0) / gridSize)
sy = smoothstep((y - y0) / gridSize)
ix0 = lerp(s, t, sx)
ix1 = lerp(u, v, sx)
value = lerp(ix0, ix1, sy)
// 6. æ£èŠåãã
return value / maxPossibleValue // -1ã1ã«æ£èŠåããïŒè¿äŒŒå€ïŒ
泚ïŒããã¯ã説æãç®çãšããç°¡ç¥åãããäŸã§ããå®å šãªå®è£ ã§ã¯ãããå ç¢ãªä¹±æ°ãžã§ãã¬ãŒã¿ãŒãšãããé«åºŠãªè£é颿°ãå¿ èŠã«ãªããŸãã
çµè«
ããŒãªã³ãã€ãºã¯ãæ»ããã§èªç¶ã«èŠããã©ã³ãã ãªå€ãçæããããã®åŒ·åã§çšéã®åºãã¢ã«ãŽãªãºã ã§ãããã®ã¢ããªã±ãŒã·ã§ã³ã¯åºå€§ã§å€æ§ã§ãããå°åœ¢çæããã¯ã¹ãã£ã®äœæãããã¢ãã¡ãŒã·ã§ã³ãèŠèŠå¹æã«ãŸã§åã³ãŸããèšç®ã³ã¹ããé¡èãªã¢ãŒãã£ãã¡ã¯ãã®å¯èœæ§ãªã©ãããã€ãã®å¶éã¯ãããŸããããã®å©ç¹ã¯æ¬ ç¹ãã¯ããã«äžåããããã·ãŒãžã£ã«çæã«åãçµããã¹ãŠã®éçºè ãŸãã¯ã¢ãŒãã£ã¹ãã«ãšã£ãŠè²ŽéãªããŒã«ãšãªã£ãŠããŸãã
ããŒãªã³ãã€ãºã®èåŸã«ããååãçè§£ããããŸããŸãªãã©ã¡ãŒã¿ãŒãšæè¡ã詊ãããšã§ããã®å¯èœæ§ãæå€§éã«åŒãåºããèŠäºã§æ²¡å ¥åã®äœéšãäœæã§ããŸããã·ã³ãã¬ãã¯ã¹ãã€ãºããã©ã¯ã¿ã«ãã€ãºãªã©ãããŒãªã³ãã€ãºã®ããªãšãŒã·ã§ã³ãšæ¡åŒµæ©èœãæ¢çŽ¢ããŠãããã·ãŒãžã£ã«çææ©èœãããã«åŒ·åããããšãæããªãã§ãã ãããæç¶ãåã³ã³ãã³ãçæã®äžçã¯ãåµé æ§ãšé©æ°ã®ããã®ç¡éã®å¯èœæ§ãæäŸããŸãããã€ã€ã¢ã³ãã¹ã¯ãšã¢ã¢ã«ãŽãªãºã ãã»ã«ãªãŒãããã³ãªã©ã®ä»ã®ãžã§ãã¬ãŒãã£ãã¢ã«ãŽãªãºã ã調ã¹ãŠãã¹ãã«ã»ãããåºããããšãæ€èšããŠãã ããã
ã²ãŒã ã®äžçãæ§ç¯ããå Žåã§ããããžã¿ã«ã¢ãŒãã¯ãŒã¯ãäœæããå Žåã§ããèªç¶çŸè±¡ãã·ãã¥ã¬ãŒãããå Žåã§ããããŒãªã³ãã€ãºã¯ããŒã«ãããã®è²Žéãªè³ç£ã«ãªããŸãããããé£ã³èŸŒãã§ãå®éšããŠããã®åºæ¬çãªã¢ã«ãŽãªãºã ã§äœæã§ããçŽ æŽããããã®ãçºèŠããŠãã ããã